package jp.co.katagaki.crossword.puzzle;

import java.util.Map;

import com.google.common.collect.Maps;

/**
 * クロスワードで扱うキーワードのジャンルを表す列挙型。
 *
 * @author naotake
 */
public enum Genre {
    /** 一般教養 */
    CULTURE("一般教養"),

    /** 歴史 */
    HISTORY("歴史");

    private static final Map<String, Genre> LABEL_MAP = Maps
            .newHashMapWithExpectedSize(Genre.values().length);
    static {
        for (Genre genre : Genre.values()) {
            LABEL_MAP.put(genre.label, genre);
        }
    }

    private final String label;

    private Genre(String label) {
        this.label = label;
    }

    /**
     * ジャンル名から{@link Genre}を取得する。<br />
     * 該当する{@link Genre}が存在しなかった場合 null を返す。
     *
     * @param label
     *            ジャンル名
     * @return 解決した{@link Genre}
     */
    public static Genre fromString(String label) {
        return LABEL_MAP.get(label);
    }

    /**
     * ジャンルを表す文字列表現を返す。
     *
     * @return ジャンル名
     */
    @Override
    public String toString() {
        return label;
    }
}
